package practica2bc.anotacion;



import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

import practica2bc.VentanaAnotacion;



import es.ucm.fdi.gaia.ontobridge.OntoBridge;
import es.ucm.fdi.gaia.ontobridge.OntologyDocument;

public class AnotacionTextual {
	
	JFileChooser fileChooser = null;
	JFileChooser fileChooserObj = null;
	String fileNameFoto="";
	String fileName="";
	String fileNameObj;
	boolean isSaved = false;
	private OntoBridge ob;
	
	public AnotacionTextual(){
		ob = new OntoBridge();
		ob.initWithPelletReasoner();
		//ob.initWithDIGReasoner("localhost", 8080);
		OntologyDocument mainOnto = new OntologyDocument("http://www.semantcweb.org/ontologies/2008/1/Ontology1202481514781.owl","file:test/perdidos_4.owl");
		ArrayList<OntologyDocument> subOntologies = new ArrayList<OntologyDocument>();
		ob.loadOntology(mainOnto, subOntologies, false);
	}
	
	public String openFile()
	{	
		//Si no existe el file chooser, crea uno
		if (fileChooser == null)
		{
			fileChooser = crearFileChooser("fotografias");
		}
		//Valor que retorna al elegir una opcion en el file chooser
		int retVal = fileChooser.showOpenDialog(VentanaAnotacion.getInstancia());
		//Si se escogio Ok, (o abrir)
		if (retVal == fileChooser.APPROVE_OPTION)
		{
			//El path absoluto del archivo elegido
			fileNameFoto = fileChooser.getSelectedFile().getAbsolutePath();
			try
			{
				//Pasa el nombre del archivo a URL
				java.net.URL url = fileChooser.getSelectedFile().toURL();
				isSaved = false;
		
			}
			catch (Exception ioe)
			{
				JOptionPane.showMessageDialog(VentanaAnotacion.getInstancia(), "Error al abrir el archivo.");
				
			}
		}
		return fileNameFoto;
	}

	@SuppressWarnings("static-access")
	public void saveFile(String texto)
	{
		//Utiliza un file chooser para explorar donde guardarlo
		//Si no existe, crea uno
		if (fileChooser == null)
		{
			fileChooser = crearFileChooser("descripciones");
		}
		int retVal = fileChooser.showSaveDialog(VentanaAnotacion.getInstancia());
		if (retVal == fileChooser.APPROVE_OPTION)
		{
			fileName = fileChooser.getSelectedFile().getAbsolutePath();
			if(!fileName.endsWith(".txt"))
				fileName = fileName+".txt";
			try
			{
		 		//Toma el texto que hay en el panel de texto
				java.io.FileWriter fileWriter=new java.io.FileWriter(fileName);
				java.io.BufferedWriter br = new java.io.BufferedWriter(fileWriter);
				br.write(texto);
				br.close();
				isSaved=true;
				
			}
			catch (Exception ioe)
			{
				JOptionPane.showMessageDialog(VentanaAnotacion.getInstancia(), "Error al guardar el archivo.");
			}
			
		}

	}
	
	public String anotar(String texto, String nombre){
		String fileDescripcion="";
		nombre=nombre.replace(' ', '_');
		if (!fileNameFoto.equals("")){
			Iterator<String> i=ob.listInstances("fotos");
			String s="";
			int index=1;
			while (i.hasNext()){
				i.next();
				index=index+1;
			}
			s=index+"_"+nombre;
			fileDescripcion="descrip/"+s+".txt";
			try
			{
		 		//Toma el texto que hay en el panel de texto
				java.io.FileWriter fileWriter=new java.io.FileWriter(fileDescripcion);
				java.io.BufferedWriter br = new java.io.BufferedWriter(fileWriter);
				br.write(texto);
				br.close();
				isSaved=true;
				//copiamos la imagen al directorio imagenes
				CopiarFichero cf=new CopiarFichero();
				cf.copy(new File(fileNameFoto), new File("./img/"+s+".jpg"));
				ob.createInstance("fotos",s);
				ob.createDataTypeProperty(s, "urlfoto", "./img/"+s+".jpg");
				ob.createDataTypeProperty(s, "urltexto",fileDescripcion );
				ob.save("test/perdidos_4.owl");
				return s;
			}
			catch (Exception ioe)
			{
				JOptionPane.showMessageDialog(VentanaAnotacion.getInstancia(),"Error al guardar el archivo","Error",0);
				return "error";
			}
		}
		return "error";
	}
	
	private JFileChooser crearFileChooser(String descripcion){
		JFileChooser f = new JFileChooser();
		//nos situamos en el directorio de las fuentes
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
		        "JPG & GIF Images", "jpg", "gif");
		f.setFileFilter(filter);
		f.setCurrentDirectory(new File("./imagenes"));
	    f.setAcceptAllFileFilterUsed(false);
        return f;
	}

	public OntoBridge getOb() {
		return ob;
	}

	public void setOb(OntoBridge ob) {
		this.ob = ob;
	}
	
}
